// #include<iostream>
// #include<cstdio>
// #include<unistd.h>
// #include<cstring>
// #include<sys/wait.h>
// #include<cstdlib>
// #include<string>

// int argi;
// char* argv[128];
// extern char** environ;

// int exit_code = 0;

// const char* GetUSER()
// {
//     const char* user = getenv("USER");
//     return user == nullptr ? "null" : user;
// }   

// const char* GetHost()
// {
//     // const char* host = getenv("HOSTNAME");
//     // return host == nullptr ? "null" : host;

//     //char* host;
//     static char host[128];
//     //static char* host;
//     //int ret = gethostname(host , strlen(host)); //host起初的大小是不确定的!!!
//     int ret = gethostname(host , 128);
//     return ret == -1 ? "null" : host;
// }   

// const char* GetPwd()
// {
//     const char* pwd = getenv("PWD");
//     return pwd == nullptr ? "null" : pwd;
// }

// void DisplayPrompt()
// {
//     printf("%s@%s:%s$",GetUSER(),GetHost(),GetPwd());
// }

// bool GetInput(char* ret , int size)
// {
//     //fgets(ret , size , stdin);
    

//     if(! fgets(ret , size , stdin)) //记得添加检查,避免无效输入
//     {
//         return false;
//     }
//     ret[strcspn(ret , "\n")] = '\0';  //必须去除末尾的\n
//     return true;
// }

// void ParseInput(char* input)
// {
//     //parse input and put it into argv
//     int index = 0;
//     argv[index++] = strtok(input , " ");
//     argi = 1;
//    // while(argv[index++] = strtok(input , nullptr)){} // The Order Of parameter
//     while(argv[index++] = strtok(nullptr , " ")){argi += 1;}
    

// }

// void Debug()
// {
//     //用来查看指令解析的结果
//     std::cout << "those below are parsed argv" << std::endl;
//     for(int i = 0 ; argv[i]; i++)
//     {
//         std::cout << i << "->" << argv[i] << std::endl;
//     }
//     std::cout << "parament cnt :" << argi << std::endl;
// }

// void InitEnv()
// {

// }

// void Execute()
// {
//     pid_t ret = fork();

//     if(ret == 0)
//     {
//         execvp(argv[0],argv);
//         perror("execvp failed\n");
//         exit_code = 1;
//     }
//     else if (ret > 0)
//     {
//         int status = -1;
//         wait(&status);
//     }
//     else
//     {
//         perror("wait failed\n");
//         exit_code = 1;
//     }
//     exit_code = 0;
// }

// bool JudgeBuiltIn()
// {
//     //if(argv[0] == "cd") //错误的比较!!!
//     if(strcmp(argv[0],"cd") == 0)
//     {
//         if(argi == 1)
//         {
//             char* str = getenv("HOME");
//             chdir(str);
//             setenv("PWD",str,1);
//         }
//         else
//         {
//             chdir(argv[1]);
//             setenv("PWD",GetPwd(),1);
//         }
//         return true;
//     }
//     else if(strcmp(argv[0],"echo") == 0 )
//     {
        
//     }
//     else if(strcmp(argv[0],"export") == 0)
//     {
        
//     }
//     else
//     {
//         return false;
//     }
// }